package com.sos.controller;

import com.sos.model.dto.EmergencyContactAddDTO;
import com.sos.model.dto.EmergencyContactDTO;
import com.sos.model.dto.EmergencyContactUpdateDTO;
import com.sos.model.vo.ResultVO;
import com.sos.service.EmergencyContactService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

/**
 * 紧急联系人Controller（CRUD接口）
 */
@RestController
@RequestMapping("/emergency-contacts") // 接口路径前缀
@RequiredArgsConstructor
@Tag(name = "紧急联系人管理", description = "紧急联系人的增删改查接口")
public class EmergencyContactController {

    private final EmergencyContactService contactService;

    /**
     * 新增紧急联系人
     */
    @PostMapping
    @Operation(summary = "新增紧急联系人", description = "添加当前用户的紧急联系人")
    public ResultVO<EmergencyContactDTO> addContact(@Valid @RequestBody EmergencyContactAddDTO addDTO) {
        return ResultVO.success(contactService.addContact(addDTO));
    }

    /**
     * 删除紧急联系人
     */
    @DeleteMapping("/{contactId}")
    @Operation(summary = "删除紧急联系人", description = "删除当前用户的指定紧急联系人")
    public ResultVO<?> deleteContact(@PathVariable Long contactId) {
        contactService.deleteContact(contactId);
        return ResultVO.success("删除紧急联系人成功");
    }

    /**
     * 修改紧急联系人
     */
    @PutMapping("/{contactId}")
    @Operation(summary = "修改紧急联系人", description = "修改当前用户的指定紧急联系人")
    public ResultVO<EmergencyContactDTO> updateContact(
            @PathVariable Long contactId,
            @Valid @RequestBody EmergencyContactUpdateDTO updateDTO
    ) {
        return ResultVO.success(contactService.updateContact(contactId, updateDTO));
    }

    /**
     * 查询当前用户的所有紧急联系人
     */
    @GetMapping
    @Operation(summary = "查询紧急联系人列表", description = "获取当前用户的所有紧急联系人（按排序升序）")
    public ResultVO<List<EmergencyContactDTO>> getContactList() {
        return ResultVO.success(contactService.getContactList());
    }

    /**
     * 查询单个紧急联系人
     */
    @GetMapping("/{contactId}")
    @Operation(summary = "查询单个紧急联系人", description = "获取当前用户的指定紧急联系人详情")
    public ResultVO<EmergencyContactDTO> getContactById(@PathVariable Long contactId) {
        return ResultVO.success(contactService.getContactById(contactId));
    }
}